#ifndef TRAININGDATA_H
#define TRAININGDATA_H

#include <vector>
#include "myRecord.h"
#include <map>

template <typename _T> 
class myDataset
{
private:
	std::vector<myRecord<_T>> _dataset;
	std::map<int,int> _numClass;

public:

	//COSTRUTTORI
	
	/**
		Costruttore di base crea una struttura vuota
	*/
	myDataset() : _dataset(0){};

	//FINE COSTRUTTORI

	//FUNZIONI

	/**
		Numero di record nel dataset
	*/
	int size();

	/**
		Alloca un numero di vettori vuoti in base al dato passatogli
	*/
	void setSize(int size);

	/**
		Mappa con classi e numero di elementi per classe
	*/
	std::map<int,int> getMapClass();

	/**
		Aggiunge un record al mio dataset
	*/
	void addRecord(myRecord<_T> record);

	/**
		Richiede un record al mio data set
	*/
	myRecord<_T>* getRecord(int position);

	/**
		Pulisce il dataset
	*/
	void clear();

	/**
		Restituisce tutti gl'indici della dei record appartendenti alla classe specificata
	*/
	std::vector<int>* getVectorRecordClass(int Class);
















	/**
		Ritorna il numero dei recond con feature = value
	*/
	std::map<int,int> getSizeFeatureValue(int feature, float value);

	/**
		Ritorna il numero dei recond con feature < value
	*/
	std::map<int,int> getSizeFeatureDownThereshold(int feature, float thereshold);

	/**
		Ritorna il numero dei recond con feature >= value
	*/
	std::map<int,int> getSizeFeatureUpThereshold(int feature, float thereshold);

	/**
		Ritorna il numero dei recond per ogni valore assunto dalla variabile X per ogni suo valore X=vi
	*/
	std::map<_T,int> getSizeAllFeature(int feature);

	//ITERATORI
	typedef typename std::vector<myRecord<_T>>::iterator iterator;
	
	iterator begin() 
	{
		return _dataset.begin();
	}

	iterator end() 
	{
		return _dataset.end();
	}
};

#endif // IMAGE_H